# from werkzeug.security import generate_password_hash, check_password_hash

from main.ext import db
from main.models import UserBaseModel

# 不同的用户应该拥有不同的增删改查权限
PERMISSION_NONE = 0
PERMISSION_SU = 3
PERMISSION_W = 2
PERMISSION_R = 1
# PERMISSION_ORDINARY = 1
# PERMISSION_CHANGE = 20 &


class AdminModel(UserBaseModel):
    """
    用户名、密码(加密)、管理员等级(普通和超级)、权限、删除标志
        超级管理员有所有权限，但普通管理员拥有部权限，需要要每个普通管理员单独设置权限，这里只写两个权限示例
    """
    __tablename__ = 'admin'
    # username = db.Column(db.String(15), unique=True, nullable=False)
    # _password = db.Column(db.String(256))
    is_super = db.Column(db.Boolean, default=False)  # 默认为普通管理员
    permission = db.Column(db.Integer, default=PERMISSION_W)  # 普通管理员默认有普通权限，一些普通管理员离职后需要改成无权限

    # @property
    # def password(self):
    #     raise Exception('不可访问')
    #
    # @password.setter
    # def password(self, pwd):
    #     self._password = generate_password_hash(pwd)
    #
    # def check_password(self, pwd):
    #     return check_password_hash(self._password, pwd)

    def check_permission(self, permission):  # 检查当前admin有无权限用
        # 权限由高到低根据二进制位与规则进行判断，3为最高权限，2为读写，1为只读，3 & 2 = 2, 3 & 1 = 1
        return self.is_super or permission & self.permission == permission
